home *** CD-ROM | disk | FTP | other *** search
/ Internet.Works 41 / Issue 41.iso / pc / PCSoftware / Netscape 6 Official Release / nim.xpi / bin / chrome / aim.jar / content / aim / aimHelpers.js < prev    next >
Encoding:
JavaScript  |  2000-10-10  |  19.1 KB  |  686 lines

  1.  
  2. // Various IDL interfaces 
  3. var CachedAimServiceClass = null;
  4. var CachedAimManager = null;
  5. var CachedAimSession = null;
  6. var CachedAimLocateManager = null;
  7. var CachedAimBuddyManager = null;
  8. var CachedAimOdirManager = null;
  9. var CachedAimUserLookupManager = null;
  10. var CachedAimChatManager = null;
  11. var CachedAimTalkAgent = null;
  12. var CachedAimInviteManager = null;
  13. var CachedAimPrivacy = null;
  14. var CachedAimIM = null;
  15. var CachedAimPIM = null;
  16. var CachedAimAdminManager = null;
  17. var CachedAimABInfo = null;
  18. var CachedAimFeedbagManager = null;
  19. var CachedAimWarnings = null;
  20. var CachedAimPrefsManager = null;
  21. var CachedAimStringBundle = null;
  22. var CachedAimSoundManager = null;
  23. var CachedAimDataSource = null;
  24.  
  25. // Various IDL that represent enumerated types
  26. var CachedAimAuthorizerState = null;
  27. var CachedAimInsertionStyles = null;
  28. var CachedAimPrivacyModes = null;
  29. var CachedAimTalkAudioMode = null;
  30.  
  31. function aimDataSource()
  32. {
  33.     try {
  34.         if (CachedAimDataSource == null) {
  35.             var RDFClass = Components.classes["@mozilla.org/rdf/rdf-service;1"];
  36.             var RDF = RDFClass.getService(Components.interfaces.nsIRDFService);
  37.             CachedAimDataSource = RDF.GetDataSource("rdf:AIM");
  38.         }
  39.     } catch (e) {};
  40.  
  41.     return CachedAimDataSource;
  42. }
  43.  
  44. function aimServiceClass() 
  45. {
  46.     try {
  47.     if (CachedAimServiceClass == null)
  48.         CachedAimServiceClass = Components.classes['@netscape.com/aim/IMManager;1'];
  49.     } catch (e) {};
  50.  
  51.     return CachedAimServiceClass;
  52. }
  53.  
  54. function aimManager()
  55. {
  56.     try {
  57.     if (CachedAimManager == null)
  58.         CachedAimManager = aimServiceClass().getService(Components.interfaces.nsIIMManager);
  59.     } catch (e) {};
  60.  
  61.     return CachedAimManager;
  62. }
  63.  
  64.  
  65. function aimSession()
  66. {
  67.     try {
  68.     if(CachedAimSession == null)
  69.         CachedAimSession = aimManager().QueryInterface(Components.interfaces.nsIAimSession);
  70.     } catch (e) {}; 
  71.  
  72.     return CachedAimSession;
  73. }
  74.  
  75. function aimPrivacy()
  76. {
  77.     try {
  78.     if(CachedAimPrivacy == null)
  79.         CachedAimPrivacy = aimManager().QueryInterface(Components.interfaces.nsIAimPrivacy);
  80.     } catch (e) {}; 
  81.  
  82.     return CachedAimPrivacy;
  83. }
  84.  
  85.  
  86. function aimBuddyManager()
  87. {
  88.     try {
  89.     if(CachedAimBuddyManager == null)
  90.         CachedAimBuddyManager = aimManager().QueryInterface(Components.interfaces.nsIAimBuddy);
  91.     } catch (e) {}; 
  92.  
  93.     return CachedAimBuddyManager;
  94. }
  95.  
  96.  
  97. function aimLocateManager()
  98. {
  99.     try {
  100.     if(CachedAimLocateManager == null)
  101.         CachedAimLocateManager = aimManager().QueryInterface(Components.interfaces.nsIAimLocateManager);
  102.     } catch (e) {}; 
  103.  
  104.     return CachedAimLocateManager;
  105. }
  106.  
  107.  
  108. function aimOdirManager()
  109. {
  110.     try {
  111.     if(CachedAimOdirManager == null)
  112.         CachedAimOdirManager = aimManager().QueryInterface(Components.interfaces.nsIAimOdirManager);
  113.     } catch (e) {}; 
  114.  
  115.     return CachedAimOdirManager;
  116. }
  117.  
  118. function aimUserLookupManager()
  119. {
  120.     try {
  121.     if(CachedAimUserLookupManager == null)
  122.         CachedAimUserLookupManager = aimManager().QueryInterface(Components.interfaces.nsIAimUserLookupManager);
  123.     } catch (e) {}; 
  124.  
  125.     return CachedAimUserLookupManager;
  126. }
  127.  
  128.  
  129. function aimChatManager()
  130. {
  131.     try {
  132.     if(CachedAimChatManager == null)
  133.         CachedAimChatManager = aimManager().QueryInterface(Components.interfaces.nsIAimChatManager);
  134.     } catch (e) {}; 
  135.  
  136.     return CachedAimChatManager;
  137. }
  138.  
  139.  
  140. function aimTalkAgent()
  141. {
  142.     try {
  143.     if(CachedAimTalkAgent == null)
  144.         CachedAimTalkAgent = aimManager().QueryInterface(Components.interfaces.nsIAimTalkAgent);
  145.     } catch (e) {}; 
  146.  
  147.     return CachedAimTalkAgent;
  148. }
  149.  
  150.  
  151. function aimInviteManager()
  152. {
  153.     try {
  154.     if(CachedAimInviteManager == null)
  155.         CachedAimInviteManager = aimManager().QueryInterface(Components.interfaces.nsIAimInviteManager);
  156.     } catch (e) {}; 
  157.  
  158.     return CachedAimInviteManager;
  159. }
  160.  
  161. function aimSoundManager()
  162. {
  163.     try {
  164.     if(CachedAimSoundManager == null)
  165.         CachedAimSoundManager = aimManager().QueryInterface(Components.interfaces.nsIAimSoundManager);
  166.     } catch (e) {}; 
  167.  
  168.     return CachedAimSoundManager;
  169. }
  170.  
  171. function aimIM()
  172. {
  173.     try {
  174.     if(CachedAimIM == null)
  175.         CachedAimIM = aimManager().QueryInterface(Components.interfaces.nsIAimIM);
  176.     } catch (e) {}; 
  177.  
  178.     return CachedAimIM;
  179. }
  180.  
  181.  
  182. function aimAdminManager()
  183. {
  184.     try {
  185.     if(CachedAimAdminManager == null)
  186.         CachedAimAdminManager = aimManager().QueryInterface(Components.interfaces.nsIAimAdminManager);
  187.     } catch (e) {}; 
  188.  
  189.     return CachedAimAdminManager;
  190. }
  191.  
  192.  
  193. function aimABInfo()
  194. {
  195.     try {
  196.     if(CachedAimABInfo == null)
  197.         CachedAimABInfo = aimManager().QueryInterface(Components.interfaces.nsIAimABInfo);
  198.     } catch (e) {}; 
  199.  
  200.     return CachedAimABInfo;
  201. }
  202.  
  203.  
  204. function aimFeedbagManager()
  205. {
  206.     try {
  207.     if(CachedAimFeedbagManager == null)
  208.         CachedAimFeedbagManager = aimManager().QueryInterface(Components.interfaces.nsIAimFeedbagManager);
  209.     } catch (e) {}; 
  210.  
  211.     return CachedAimFeedbagManager;
  212. }
  213.  
  214. function aimWarnings()
  215. {
  216.     try {
  217.     if(CachedAimWarnings == null)
  218.         CachedAimWarnings = aimManager().QueryInterface(Components.interfaces.nsIAimWarnings);
  219.     } catch (e) {}; 
  220.  
  221.     return CachedAimWarnings;
  222. }
  223.  
  224. function aimPrefsManager()
  225. {
  226.     try {
  227.     if(CachedAimPrefsManager == null)
  228.         CachedAimPrefsManager = aimManager().QueryInterface(Components.interfaces.nsIPrefsManager);
  229.     } catch (e) {}; 
  230.  
  231.     return CachedAimPrefsManager;
  232. }
  233.  
  234.  
  235. function aimStringBundle()
  236. {
  237.     try {
  238.     if(CachedAimStringBundle == null)
  239.         CachedAimStringBundle = aimManager().QueryInterface(Components.interfaces.nsIStringBundle);
  240.     } catch (e) {}; 
  241.  
  242.     return CachedAimStringBundle;
  243. }
  244.  
  245. // The various enumerated types/interfaces
  246.  
  247.  
  248. function aimInsertionStyles()
  249. {
  250.     try {
  251.     if(CachedAimInsertionStyles == null)
  252.         CachedAimInsertionStyles = Components.interfaces.nsAimInsertionStyles;
  253.     } catch (e) {}; 
  254.  
  255.     return CachedAimInsertionStyles;
  256. }
  257.  
  258.  
  259. function aimPrivacyModes()
  260. {
  261.     try {
  262.     if(CachedAimPrivacyModes == null)
  263.         CachedAimPrivacyModes = Components.interfaces.nsAimPrivacyModes;
  264.     } catch (e) {}; 
  265.  
  266.     return CachedAimPrivacyModes;
  267. }
  268.  
  269. /********* Use this to know if two formatted screen names are the same *******/
  270.  
  271. function aimNormalizeScreenName(oldSN)
  272. {
  273.     return (oldSN.replace(/\s/gi,"")).toLowerCase();
  274.  
  275. /*
  276.     // remove spaces
  277.     var newSN="";
  278.     newSN = oldSN.replace(/\s/gi,"");
  279.  
  280.     // lower the case
  281.     newSN = newSN.toLowerCase();
  282.     
  283.     return newSN;
  284. */
  285. }
  286.  
  287.  
  288.  
  289. function aimIsShrimp()
  290. {
  291. /** 
  292.  * aimIsShrimp -- Determine if we are running shrimp or not. 
  293.  * Reads aim.app.smallbusiness pref from all-nsnim.j1
  294.  * 
  295.  * @author syd 8/8/2000
  296.  * @return <code>true</code> is shrimp is installed, <code>false</code> otherwise.
  297.  */ 
  298.     var isShrimp = aimPrefsManager().GetBoolPref("aim.app.smallbusiness",null, true);
  299.  
  300.     return isShrimp;
  301.  }
  302.  
  303. function aimIsSameScreenName(sN1, sN2)
  304. {
  305.     return (aimNormalizeScreenName(sN1) == aimNormalizeScreenName(sN2))
  306. }
  307.  
  308. function aimMigrateBuddyList( who )
  309. {
  310.     var whoMigrate = aimPrefsManager().GetCharPref("aim.session.migrateBuddyList",null, true);
  311.     if ( !whoMigrate || whoMigrate == null || whoMigrate == undefined || whoMigrate != who ) {
  312.         return;
  313.     }
  314.     dump( "***************MigrateBuddyList who " + who + " whoMigrate " + whoMigrate + "\n" );
  315.     var IMServiceClass;
  316.     var pAimMigrator;
  317.     try { 
  318.         IMServiceClass = Components.classes['@netscape.com/aim/AimMigrator;1'];
  319.         if ( IMServiceClass != null ) {
  320.             try {
  321.                 pAimMigrator = IMServiceClass.getService(Components.interfaces.nsIAimMigrator);
  322.                 if ( pAimMigrator != null ) {
  323.                     dump( "****************Got us a migrator, doit!\n" );
  324.                     pAimMigrator.AimMigratorMigrateBuddyList( who );
  325.                     aimPrefsManager().SetCharPref("aim.session.migrateBuddyList", "nobody", null, true);
  326.                 }
  327.             }
  328.             catch ( exception ) {
  329.                 // nothing
  330.             }
  331.         }
  332.     }
  333.     catch ( exception ) {
  334.         // nothing
  335.     }
  336. }
  337.  
  338. function html(node)
  339. {
  340.     var answer = "";
  341.     var type = node.nodeType;
  342.     if (type == Node.ELEMENT_NODE) {
  343.  
  344.         // open tag
  345.         //dump("<" + node.tagName)
  346.         answer += "<" + node.tagName;
  347.  
  348.         // dump the attributes if any
  349.         attributes = node.attributes;
  350.         if (null != attributes) {
  351.             var countAttrs = attributes.length;
  352.             var index = 0;
  353.             while(index < countAttrs) {
  354.                 att = attributes[index];
  355.                 if (null != att) {
  356.                     answer += " " + att.name + "=\"" + att.value + "\"";
  357.                 }
  358.                 index++
  359.             }
  360.         }
  361.  
  362.         // close tag
  363.         answer += ">";
  364.  
  365.         // recursively dump the children
  366.         if (node.hasChildNodes()) {
  367.             // get the children
  368.             var children = node.childNodes;
  369.             var length = children.length;
  370.             var count = 0;
  371.             while(count < length) {
  372.                 child = children[count]
  373.                 answer += html(child)
  374.                 count++
  375.             }
  376.             answer += "</" + node.tagName + ">";
  377.         }
  378.  
  379.  
  380.     }
  381.     // if it's a piece of text just dump the text
  382.     else if (type == Node.TEXT_NODE) {
  383.         answer += node.data;
  384.     }
  385.     return answer;
  386. }
  387.  
  388. function createInstance( contractid, iidName ) {
  389.         var iid = eval( "Components.interfaces." + iidName );
  390.         return Components.classes[ contractid ].createInstance( iid );
  391. }
  392.  
  393. function cmdFileSave()
  394. {
  395.   var fileSpec = createInstance( "@mozilla.org/filespecwithui;1", "nsIFileSpecWithUI" );
  396.         var answer;
  397.         var wind = top.frames["LogWnd"];
  398.         if ( wind ) {
  399.         myhead = wind.document.getElementsByTagName("HEAD").item(0);
  400.         if (myhead == null) {
  401.             myhead = wind.document.createElement("HEAD");
  402.             myhtml = wind.document.getElementsByTagName("HTML").item(0);
  403.             myhtml.appendChild(myhead);
  404.         }
  405.         mymeta = wind.document.createElement("META");
  406.         mymeta.setAttribute("HTTP-EQUIV", "Content-Type");
  407.         mymeta.setAttribute("CONTENT", "text/html; charset=UTF-8");
  408.         myhead.appendChild(mymeta);
  409.  
  410.                 answer = html(wind.document.documentElement);
  411.                 answer += "\n";
  412.         }
  413.         else {
  414.                 return;
  415.         }
  416.         try {
  417.                 var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
  418.                 // XXX i18n
  419.                 fp.init(window, aimString( "title.saveconversation" ),
  420.                         nsIFilePicker.modeSave);
  421.                 fp.appendFilters(nsIFilePicker.filterHTML |
  422.                         nsIFilePicker.filterText | nsIFilePicker.filterAll );
  423.         var returnCode = fp.show();
  424.                 if (returnCode == nsIFilePicker.returnOK || returnCode == nsIFilePicker.returnReplace) {
  425.             dump ("Going to Save: " + fp.file.path  + "\n");
  426.             var pPAimIM = aimPIMObject();
  427.             if (pPAimIM) {
  428.                             pPAimIM.SaveConversation(fp.file.path, answer);
  429.             }
  430.                 }
  431.         } catch (ex) {
  432.         dump("it didnt work for some reason \n");
  433.         }
  434. }
  435.  
  436. function aimCmdClose()
  437. {
  438.    dump("cmdClose\n");
  439.    top.close();
  440.  
  441. }
  442.  
  443. function cmdFileClose()
  444. {
  445.     aimCmdClose();
  446. }
  447.  
  448. function cmdFilePrint()
  449. {
  450.         dump("Implement Menu Command cmdFilePrint()\n");
  451.         top.frames["LogWnd"].print();
  452. }
  453.  
  454. function GetAwayMessagesFileLoc()
  455. {
  456.         /* use the fileLocator to look in the profile directory to find
  457.            'panels.rdf', which is the database of the user's currently
  458.            selected panels. */
  459.         var fileLocatorService  =
  460.             Components.classes["@mozilla.org/filelocator;1"].getService(Components.interfaces.nsIFileLocator);
  461.  
  462.         /* if <profile>/panels.rdf doesn't exist, GetFileLocation() will copy
  463.          * bin/defaults/profile/panels.rdf to <profile>/panels.rdf */
  464.  
  465.         /* XXX, yeah, I know, this seems hacky, but they haven't IDLized
  466.            these constants yet. See nsFileLocations.h for more gore. */
  467.  
  468.         var messages_file = fileLocatorService.GetFileLocation(66626);
  469.  
  470.         var userProfile = fileLocatorService.GetFileLocation(0x00010000 + 12);
  471.         var defaultProfile = fileLocatorService.GetFileLocation(0x00010000 + 18);
  472.         var userProfileFull = userProfile.URLString + "default-messages.rdf";
  473.         var defaultProfileFull = defaultProfile.URLString + "default-messages.rdf";
  474.  
  475.  
  476.         var screenName = "";    
  477.     
  478.     myPref = aimPrefsManager();
  479.         if ( myPref ) {
  480.                 try {
  481.                         screenName = myPref.GetCharPref( "aim.session.screenname" , null, false);
  482.                 }
  483.                 catch(e) {
  484.                         screenName = "";
  485.                 }
  486.         }
  487.         if ( screenName != "" ) {
  488.                 screenName = screenName + ".";
  489.         }
  490.  
  491. //        var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
  492.         var file = Components.classes["@mozilla.org/filespec;1"].createInstance(Components.interfaces.nsIFileSpec);
  493.  
  494. //      dump( "**************initWithPath " + userProfileFull + "\n" );
  495. //      file.initWithPath( userProfileFull );
  496.  
  497.         var messages_file_str = messages_file.URLString;
  498.         messages_file_str = messages_file_str.replace("panels.rdf", screenName +"dm.rdf" );
  499.         file.URLString = userProfileFull;
  500.  
  501. //      dump( "**************messages_file_str " + messages_file_str + "\n" );
  502.         var src = Components.classes["@mozilla.org/filespec;1"].createInstance(Components.interfaces.nsIFileSpec);
  503. //      dump( "************** got src, setting its URLString \n" );
  504.         src.URLString = defaultProfileFull;
  505. //      dump( "************** src.URLString " + src.URLString + "\n" );    
  506.     // if default-messages.rdf is not there, and there is no screenname.default-messages.rdf        // then copy default-messages.rdf from default dir, and rename it.
  507.         // else, we have a screename.default-messages.rdf, in which case we do nothing, or we have
  508.         // a default-messages.rdf that we need to rename to screenname.default-messages.rdf.
  509.  
  510.         if ( !file.exists() ) {
  511.                 file.URLString = messages_file_str;
  512.                 if ( !file.exists() ) {
  513. //                      dump( "**************copying " + src.URLString + " to " + userProfile.URLString + "\n" );
  514.                         src.copyToDir( userProfile );
  515.                         src.URLString = userProfileFull;
  516. //                      dump( "**************renaming " + src.URLString + " to " + messages_file_str + "\n" );
  517.                         src.rename( screenName + "dm.rdf" );
  518.                 }
  519.         } else {
  520.                 src.URLString = userProfileFull;
  521. //              dump( "**************renaming " + src.URLString + " to " + messages_file_str + "\n" );
  522.                 src.rename( screenName + "dm.rdf" );
  523.         }
  524.         return( messages_file_str );
  525. }  
  526.  
  527. function getEnums( myInterface )
  528. {
  529.         var enums = {};
  530.         for ( var i in myInterface ) {
  531.                 if ( typeof myInterface[i] == "number" ) {
  532.                         enums[i] = myInterface[i];
  533.                 }
  534.         }
  535.         return enums;
  536. }
  537.  
  538. function
  539. MigrateDiscover()
  540. {
  541.     var IMServiceClass;
  542.     var pAimMigrator;
  543.     try { 
  544.         IMServiceClass = Components.classes['@netscape.com/aim/AimMigrator;1'];
  545.         if ( IMServiceClass != null ) {
  546.             try {
  547.                 pAimMigrator = IMServiceClass.getService(Components.interfaces.nsIAimMigrator);
  548.                 if ( pAimMigrator != null ) {
  549.                     version = pAimMigrator.AimMigratorDiscover();
  550.                     parent.migrationSource = version;
  551.                     if ( version == null || version == "" ) {
  552.                         return false;
  553.                     }
  554.  
  555.                     var stringPref = {};
  556.                     var stringPref2 = {};
  557.                     var enums = getEnums( Components.interfaces.nsIAimMigrator );
  558.                     // get the default screen name
  559.  
  560.                     var ret = pAimMigrator.AimMigratorGetStringPref2( enums.DefaultScreenName, stringPref, stringPref2 );
  561.  
  562.                     if ( ret == true ) {
  563.                         parent.migrationScreenName = stringPref.value;
  564.                         parent.migrationPassword = stringPref2.value;
  565.                     }
  566.                     else {
  567.                         parent.migrationScreenName = "";
  568.                         parent.migrationPassword = "";
  569.                     }
  570.  
  571.                     // get the remaining screen names, if any
  572.                     var stringPrefVec = {}; 
  573.                     var vecSize = {};
  574.                     stringPrefVec = pAimMigrator.AimMigratorGetStringVectorPref( enums.ScreenName, vecSize );
  575.  
  576.                     var i;
  577.                     parent.migrationScreenNameVecSize = vecSize;
  578.                     parent.migrationScreenNameVec = stringPrefVec;
  579.  
  580.                     return ret;        // all we care about is did we get a default screenname
  581.                 }
  582.             }
  583.             catch(exception) {
  584.                 return false;
  585.             }
  586.         }    
  587.     }
  588.     catch(exception) {
  589.         return false;
  590.     }
  591. }
  592.  
  593. function AimOnlineAway()
  594. {
  595.     var RDFClass = Components.classes["@mozilla.org/rdf/rdf-service;1"];
  596.     var RDF = RDFClass.getService(Components.interfaces.nsIRDFService);
  597.     var SessionState = RDF.GetResource("http://home.netscape.com/NC-rdf#OnlineState");
  598.     var dataSource = aimDataSource();
  599.     var AimSession = RDF.GetResource("NC:AIM/Session");
  600.     var session = aimSession();
  601.  
  602.     var target = dataSource.GetTarget(AimSession, SessionState, true);
  603.     var state = target.QueryInterface(Components.interfaces.nsIRDFLiteral).Value;
  604.     if ("OnlineAway" == state)
  605.         return true;
  606.     return false;
  607. }
  608.  
  609. function ComeBack()
  610. {
  611.     locateManager = aimLocateManager();
  612.  
  613.     if ( locateManager ) {
  614.         locateManager.SetUserInfoAwayMessage(null);
  615.     }
  616. }
  617.  
  618. function AimtoOpenWindowByType( inType, uri )
  619. {
  620.          dump ("AimtoOpenWindowByType " + uri + " \n");
  621.           
  622.          var windowManager = Components.classes['@mozilla.org/rdf/datasource;1?name=window-mediator'].getService();
  623.  
  624.          var     windowManagerInterface = windowManager.QueryInterface( Components.interfaces.nsIWindowMediator);
  625.  
  626.          var topWindow = windowManagerInterface.getMostRecentWindow( inType );
  627.          
  628.          if ( topWindow ) {
  629.                  topWindow.focus();
  630.          }
  631.          else
  632.                  window.openDialog(uri, "_blank", "chrome,all,dialog=no", "Setup");
  633.  }                     
  634.  
  635. function toOpenWindowByType( inType, uri )
  636. {
  637.          dump ("toOpenWindowByType " + uri + " \n");
  638.           
  639.          var windowManager = Components.classes['@mozilla.org/rdf/datasource;1?name=window-mediator'].getService();
  640.  
  641.          var     windowManagerInterface = windowManager.QueryInterface( Components.interfaces.nsIWindowMediator);
  642.  
  643.          var topWindow = windowManagerInterface.getMostRecentWindow( inType );
  644.          
  645.          if ( topWindow ) {
  646.                  topWindow.focus();
  647.          }
  648.          else
  649.                  window.openDialog(uri, "_blank", "chrome,all,dialog=no", "Setup");
  650.  }         
  651.  
  652. function aimGlobalCmdHelp()
  653. {
  654.     if (aimIsShrimp())
  655.     {
  656.         AimtoOpenWindowByType("help:nim","chrome://communicator/content/help/help_nim.xul"); 
  657.     }
  658.     else
  659.     {
  660.         AimtoOpenWindowByType("help:im","chrome://communicator/content/help/help_im.xul"); 
  661.     }
  662. }
  663.  
  664.  
  665.  function AimgoClickThrobber(urlPref)
  666.  {
  667.     if (aimIsShrimp())
  668.     {
  669.         var url;
  670.         try {
  671.                 var pref = Components.classes["@mozilla.org/preferences;1"].getService();
  672.                 if( pref )
  673.                 pref = pref.QueryInterface( Components.interfaces.nsIPref );
  674.                 url = pref.getLocalizedUnicharPref(urlPref);
  675.                 aimCmdNewBrowser(url);
  676.          }
  677.         catch(e) {
  678.                 url = null;
  679.         }
  680.     }
  681.     else
  682.     {
  683.         goClickThrobber( urlPref );
  684.     }
  685.  }
  686.